package com.smart.tool.retry;

/**
 * @Author gao.gwq
 * @Version RetryFunction.java, v 0.1 2024年02月26日 10:45 gao.gwq
 * @Description: TODO
 */
@FunctionalInterface
public interface Retry<R> {

    R execute();


    /**
     * 每次重试后回调
     *
     * @param numOfRetry 当前重试次数
     * @param result     本次执行的结果 ,
     *                   如果本次执行异常，则该参数为null
     *                   如果本次执行成功，则该参数为正常结果
     *                   如果本次是无结果的重试，则该参数为null
     * @param throwable  异常信息
     */
    default void completeOneRetry(int numOfRetry, R result, Throwable throwable) {
    }

    ;

    /**
     * 所有重试完成后回调
     *
     * @param retryCount 最后重试次数
     * @param result     最后一次执行结果
     *                   如果最后一次执行异常，则该参数为null
     *                   如果最后一次执行成功，则该参数为正常结果
     *                   如果是无结果的重试，则该参数为null
     * @param throwable  最后一次异常信息
     */

    default void completeAllRetry(int retryCount, R result, Throwable throwable) {
    }

    ;

}
